home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #3 / Amiga Plus CD - 2002 - No. 03.iso / AmigaPlus / Tools / Development / envCPP31 / c++ / rexx / make.rexx < prev    next >
Encoding:
OS/2 REXX Batch file  |  2002-01-01  |  9.9 KB  |  458 lines

  1. /* rexx macro */
  2.  
  3. options results                             /* enable return codes     */
  4.  
  5. if (left(address(), 6) ~= "GOLDED") then    /* not started by GoldEd ? */
  6.  
  7.     address 'GOLDED.1'
  8.  
  9. 'LOCK CURRENT RELEASE=4'                    /* lock GUI, gain access   */
  10.  
  11. if (RC ~= 0) then
  12.  
  13.     exit
  14.  
  15. options failat 6                            /* ignore warnings         */
  16.  
  17. signal on syntax                            /* ensure clean exit       */
  18.  
  19. /* ------------------------- INSERT YOUR CODE HERE: -------------------- */
  20.  
  21. /* INPUT: SOFTWARE/K,TARGET/K (supported values: SAS/C,SAS/C-GNUMAKE,VBCC,DICE,DICE-GNUMAKE,STORMC,GENERIC) */
  22.  
  23. parse arg SOFTWARE TARGET .
  24.  
  25. 'QUERY CAT'
  26.  
  27. if (RESULT = "deutsch") then do
  28.  
  29.     STRING.sMAKEFILE      = "Makefile auswählen"
  30.     STRING.sTARGET        = "Target für 'make' angeben:"
  31.     STRING.sSCMSGERROR    = "Kann SAS/C-Message-Browser nicht starten !"
  32. end
  33. else do
  34.  
  35.     STRING.sMAKEFILE      = "Select Makefile"
  36.     STRING.sTARGET        = "Specify target for 'make':"
  37.     STRING.sSCMSGERROR    = "Can not start the SAS/C message browser !"
  38. end
  39.  
  40. /* query target */
  41.  
  42. if (upper(TARGET) = "QUERYTARGET") then do
  43.  
  44.     'QUERY OPTIONTARGET VAR=TARGET'
  45.  
  46.     'FIX VAR=TARGET'
  47.  
  48.     'REQUEST STRING TITLE="' || STRING.sTARGET || '" VAR=TARGET OLD="' || TARGET || '"'
  49.  
  50.     if (RC ~= 0) then do
  51.  
  52.         'UNLOCK'
  53.  
  54.         exit
  55.     end
  56.  
  57.     'FIX VAR=TARGET'
  58.  
  59.     'SET OPTIONTARGET VALUE="' || TARGET || '"'
  60. end
  61.  
  62. SOFTWARE = upper(SOFTWARE)
  63.  
  64. if (SOFTWARE = "") then
  65.  
  66.     SOFTWARE = "GENERIC"
  67.  
  68. 'QUERY PATH VAR=PATH'
  69.  
  70. R = pragma('D', PATH)
  71.  
  72. /* locate makefile for current compiler */
  73.  
  74. call findmakefile(SOFTWARE)
  75.  
  76. if (MAKEFILE = "") then do
  77.  
  78.     /* locate makefile for any compiler */
  79.  
  80.     call findmakefile("")
  81.  
  82.     if (MAKEFILE = "") then do
  83.  
  84.         'REQUEST FILE TITLE="' || STRING.sMAKEFILE || '" PATH="' || PATH || '" VAR=MAKEFILE'
  85.  
  86.         if (RC ~= 0) then do
  87.  
  88.             'UNLOCK'
  89.  
  90.             exit
  91.         end
  92.     end
  93. end
  94.  
  95. /* some make tools get confused by path information in makefile name */
  96.  
  97. 'FILEPART FILE="' || MAKEFILE || '" VAR=MAKEFILE'
  98.  
  99. /* identify compiler */
  100.  
  101. if (pos("smakefile", MAKEFILE) ~= 0) then
  102.  
  103.     SOFTWARE = "SAS/C"
  104.  
  105. else if (pos("dmakefile", MAKEFILE) ~= 0) then
  106.  
  107.     SOFTWARE = "DICE"
  108. else
  109.     SOFTWARE = "GENERIC"
  110.  
  111. if (MAKEFILE ~= "") then do
  112.  
  113.     /* still no idea what compiler we are dealing with ? */
  114.  
  115.     if (SOFTWARE = "GENERIC") then do
  116.  
  117.         if open('MAKEFILE', MAKEFILE, 'READ') then do
  118.  
  119.             /* determine compiler by looking at makefile */
  120.  
  121.             do until eof('MAKEFILE')
  122.  
  123.                 DATA = readln('MAKEFILE')
  124.  
  125.                 if (index(DATA, "dcc:") ~= 0) then do
  126.  
  127.                     SOFTWARE = "DICE-GNUMAKE"
  128.  
  129.                     leave
  130.                 end
  131.  
  132.                 if (index(DATA, "vbcc") ~= 0) then do
  133.  
  134.                     SOFTWARE = "VBCC"
  135.  
  136.                     leave
  137.                 end
  138.  
  139.                 if (index(DATA, "gcc") ~= 0) then do
  140.  
  141.                     SOFTWARE = "GCC"
  142.  
  143.                     leave
  144.                 end
  145.  
  146.                 if (index(DATA, "sc:") ~= 0) then do
  147.  
  148.                     SOFTWARE = "SAS/C-GNUMAKE"
  149.  
  150.                     leave
  151.                 end
  152.             end
  153.  
  154.             R = close('SCMSG')
  155.         end
  156.     end
  157.  
  158.     /* last attempt: make compiler decision based on options file we find */
  159.  
  160.     if (SOFTWARE = "GENERIC") then do
  161.  
  162.         if (exists("vc.config")) then
  163.  
  164.             SOFTWARE = "VBCC"
  165.  
  166.         if (exists("scoptions")) then
  167.  
  168.             SOFTWARE = "SAS/C-GNUMAKE";
  169.     end
  170.  
  171.     /* make */
  172.  
  173.     if (TARGET ~= "") then
  174.  
  175.         TARGET = " " || TARGET
  176.  
  177.     /* console plug-in loaded ? */
  178.  
  179.     'CMD CHECK=CONSOLE'
  180.  
  181.     if (RESULT = "TRUE") then
  182.  
  183.         'CONSOLE CLEAR'
  184.  
  185.     if ((SOFTWARE = "SAS/C") | (SOFTWARE = "SAS/C-GNUMAKE")) then do
  186.  
  187.         /* start SAS/C message browser */
  188.  
  189.         call run_scmsg
  190.  
  191.         if (show('P', 'SC_SCMSG')) then do
  192.  
  193.             /* choose make tool: GNU 'make' with "makefile" and SAS/C 'smake' with "smakefile" (via scmsg)  */
  194.  
  195.             if (SOFTWARE = "SAS/C-GNUMAKE") then do
  196.  
  197.                 'RUN ASYNC CONSOLE="GoldED (make)" CMD="golded:add-ons/c++/tools/make/bin/make -f *"' || MAKEFILE || '*" ' || TARGET || '" DIR="' || PATH || '" STACK=16384 SHANGHAI=5'
  198.             end
  199.             else do
  200.  
  201.                 /* redirect smake console on our screen */
  202.  
  203.                 'RUN SHANGHAI=3'
  204.  
  205.                 'UNLOCK'
  206.  
  207.                 address 'SC_SCMSG'
  208.  
  209.                 /* make via SCMSG */
  210.  
  211.                 'abort'
  212.  
  213.                 'newbld'
  214.  
  215.                 'build -f "' || MAKEFILE || '"' || TARGET
  216.  
  217.                 address
  218.             end
  219.         end
  220.     end
  221.     else if (SOFTWARE = "DICE") then do
  222.  
  223.         'RUN ASYNC CONSOLE="GoldED (make)" CMD="dmake" DIR="' || PATH || '" STACK=16384 SHANGHAI=5'
  224.     end
  225.     else if (SOFTWARE = "VBCC") then do
  226.  
  227.         'RUN ASYNC CONSOLE="GoldED (make)" CMD="golded:add-ons/c++/tools/make/bin/make -f *"' || MAKEFILE || '*" ' || TARGET || '" DIR="' || PATH || '" STACK=65535 SHANGHAI=5'
  228.     end
  229.     else do
  230.  
  231.         'QUERY CON VAR=DIMENSIONS'
  232.  
  233.         'QUERY SCREEN VAR=SCREEN'
  234.  
  235.         CON = "con:" || DIMENSIONS || "/make/AUTO/WAIT/CLOSE/SCREEN" || SCREEN
  236.  
  237.         'RUN ASYNC CONSOLE="GoldED (make)" CMD="golded:add-ons/c++/tools/make/bin/make -f *"' || MAKEFILE || '*" ' || TARGET || '" DIR="' || PATH || '" STACK=65535 SHANGHAI=5'
  238.     end
  239. end
  240.  
  241. /* ---------------------------- END OF YOUR CODE ----------------------- */
  242.  
  243. 'UNLOCK' /* VERY important: unlock GUI */
  244. EXIT
  245.  
  246. SYNTAX:
  247.  
  248. SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
  249. 'UNLOCK'
  250. EXIT
  251.  
  252. /* /// "run_scmsg" */
  253.  
  254. run_scmsg: procedure EXPOSE STRING.
  255.  
  256.     /*  update env variable to reflect path of current project */
  257.  
  258.     'QUERY PATH VAR=PATH'
  259.  
  260.     'EXPAND NAME="' || PATH || '" VAR=PATH'
  261.  
  262.     'SET $sc/projdir "' || PATH || '"'
  263.  
  264.     /* show browser window ? */
  265.  
  266.     'QUERY OPTIONBROWSER VAR=OPTIONBROWSER'
  267.  
  268.     /* direct SCMSG to show up on our screen */
  269.  
  270.     'QUERY SCREEN VAR=PUBSCRNAME'
  271.  
  272.     if (show('P', 'SC_SCMSG')) then do
  273.  
  274.         if (OPTIONBROWSER = "TRUE") then
  275.  
  276.             address 'SC_SCMSG' 'opts screen ' || PUBSCRNAME
  277.     end
  278.     else do
  279.  
  280.         /* read and update SCMSG config file (update screen name and arexx port) */
  281.  
  282.         if (~exists("env:sc")) then
  283.  
  284.             'FILE NEWDIR NAME="env:sc"'
  285.  
  286.         LINES = 0
  287.  
  288.         if open('SCMSG', 'env:sc/scmsg', 'READ') then do
  289.  
  290.             do until eof('SCMSG')
  291.  
  292.                 DATA = readln('SCMSG')
  293.  
  294.                 parse upper var DATA COMMAND .
  295.  
  296.                 if ((COMMAND ~= "PORTNAME") & (COMMAND ~= "PUBSCREEN") & (COMMAND ~= "EDITCOMMAND") & (COMMAND ~= "GOTOFILE") & (COMMAND ~= "GOTOLINE")) then do
  297.  
  298.                     LINES = LINES + 1
  299.  
  300.                     CONFIG.LINES = DATA
  301.                 end
  302.  
  303.             end
  304.  
  305.             R = close('SCMSG')
  306.  
  307.             /* save updated config file (with current port/pubscreen name) */
  308.  
  309.             if open('SCMSG', 'env:sc/scmsg', 'WRITE') then do
  310.  
  311.                 PORTNAME = ADDRESS()
  312.  
  313.                 R = writeln('SCMSG', "PORTNAME "  || PORTNAME  )
  314.  
  315.                 R = writeln('SCMSG', "PUBSCREEN " || PUBSCRNAME)
  316.  
  317.                 R = writeln('SCMSG', "GOTOFILE WINDOW USE=%f FORCE")
  318.  
  319.                 R = writeln('SCMSG', "GOTOLINE GOTO INDENT LINE=%l UNFOLD=TRUE")
  320.  
  321.                 R = writeln('SCMSG', "EDITCOMMAND golded:ed")
  322.  
  323.                 if (LINES ~= 0) then do
  324.  
  325.                     do LINE=1 to (LINES - 1)
  326.  
  327.                         R = writeln('SCMSG', CONFIG.LINE)
  328.                     end
  329.                 end
  330.  
  331.                 R = close('SCMSG')
  332.             end
  333.         end
  334.  
  335.         /* run scmsg */
  336.  
  337.         if (exists("sc:c/scmsg")) then do
  338.  
  339.             COMMANDSTRING = 'sc:c/scmsg screen "' || PUBSCRNAME || '"'
  340.  
  341.             if (OPTIONBROWSER ~= "TRUE") then
  342.  
  343.                 COMMANDSTRING = COMMANDSTRING || ' rexxonly'
  344.  
  345.             'FIX VAR=COMMANDSTRING'
  346.  
  347.             'RUN ASYNC CMD="' || COMMANDSTRING || '" WAITPORT="SC_SCMSG" SECONDS=10 DIR="' || PATH || '"'
  348.         end
  349.  
  350.         if (~show('P', 'SC_SCMSG')) then do
  351.  
  352.             'REQUEST PROBLEM="' || STRING.sSCMSGERROR || '"'
  353.  
  354.             'UNLOCK'
  355.  
  356.             exit
  357.         end
  358.     end
  359.  
  360.     return
  361.  
  362. /* /// */
  363. /* /// "run_stormc" */
  364.  
  365. run_stormc: procedure EXPOSE STRING.
  366.  
  367.     if (~show('P', 'STORMSHELL')) then do
  368.  
  369.         if (exists("stormc:stormsys/stormshell")) then do
  370.  
  371.             'QUERY PATH VAR=PATH'
  372.  
  373.             'REQUEST STATUS="' || STRING.sSTARTINGSHELL || '"'
  374.  
  375.             'RUN ASYNC CMD="stormc:stormsys/stormshell" WAITPORT="STORMSHELL" SECONDS=10 SHANGHAI=10 STACK=16384 DIR="' || PATH || '"'
  376.  
  377.             'REQUEST STATUS=""'
  378.         end
  379.     end
  380.  
  381.     if (~show('P', 'STORMSHELL')) then do
  382.  
  383.         'REQUEST PROBLEM="' || STRING.sSTORMSHELL || '"'
  384.  
  385.         'UNLOCK'
  386.  
  387.         exit
  388.     end
  389.  
  390.     return
  391.  
  392. /* /// */
  393. /* /// "findmakefile" */
  394.  
  395. findmakefile: procedure expose STRING. PATH MAKEFILE
  396.  
  397.     parse arg SOFTWARE
  398.  
  399.     MAKEFILE = ""
  400.  
  401.     /* will any makefile do or is a specific type requested ? */
  402.  
  403.     'QUERY OPTIONCHOOSEMAKEFILE VAR=OPTIONCHOOSEMAKEFILE'
  404.  
  405.     if (OPTIONCHOOSEMAKEFILE = "TRUE") then do
  406.  
  407.         'REQUEST FILE TITLE="' || STRING.sMAKEFILE || '" PATH="' || PATH || '" VAR=MAKEFILE'
  408.  
  409.         if (RC ~= 0) then do
  410.  
  411.             'UNLOCK'
  412.  
  413.             exit
  414.         end
  415.     end
  416.     else do
  417.  
  418.         if (SOFTWARE = "") then do
  419.  
  420.             if (exists("dmakefile")) then
  421.  
  422.                 MAKEFILE = "dmakefile";
  423.  
  424.             else if (exists("smakefile")) then
  425.  
  426.                 MAKEFILE = "smakefile";
  427.  
  428.             else if exists("makefile") then
  429.  
  430.                 MAKEFILE = "makefile";
  431.         end
  432.         else do
  433.  
  434.             if (SOFTWARE = "DICE") then do
  435.  
  436.                 if (exists("dmakefile")) then
  437.  
  438.                     MAKEFILE = "dmakefile";
  439.             end
  440.             else if (SOFTWARE = "SAS/C") then do
  441.  
  442.                 if (exists("smakefile")) then
  443.  
  444.                     MAKEFILE = "smakefile";
  445.             end
  446.             else do /* GENERIC, VBCC, SAS/C-GNUMAKE, DICE-GNUMAKE */
  447.  
  448.                 if exists("makefile") then
  449.  
  450.                     MAKEFILE = "makefile";
  451.             end
  452.         end
  453.     end
  454.  
  455.     return
  456.  
  457. /* /// */
  458.